package com.linln.wtp.controller.imginfo;

import com.alibaba.fastjson.JSONObject;
import com.linln.common.utils.PathMappingUtil;
import com.linln.common.utils.imgInfo.Check;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.apache.commons.codec.binary.Base64;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**
 * @author : pengliang
 * 违章扫描
 * @version V1.0
 * @Project: timo
 * @Package com.linln.wtp.controller.imginfo
 * @Description: TODO
 * @date Date : 2021年01月27日 16:25
 */
@RestController
@Log4j2
@RequestMapping("image2Info")
public class ImgInfoController {

    @ResponseBody
    @PostMapping
//    @PassToken
    public Map<String, Object> info(String file) {
        MultipartFile multipartFile =  PathMappingUtil.base64ToMultipart(file);
        Map<String, Object> map = new HashMap<>();
        try {
//            y292pt
            byte[] bytes = multipartFile.getBytes();
            // 返回Base64编码过再URLEncode的字节数组字符串
            String base64 = URLEncoder.encode(Base64.encodeBase64String(bytes));
            JSONObject jsonObject = JSONObject.parseObject(Check.checkBase64(base64));
            if (jsonObject == null || jsonObject.get("error_code") != null || jsonObject.getJSONObject("words_result") == null) {
                throw new RuntimeException();
            }
            jsonObject = jsonObject.getJSONObject("words_result");
            if (jsonObject.getJSONObject("车辆识别代号") != null) {
                map.put("vin", jsonObject.getJSONObject("车辆识别代号").getString("words"));
            }else{
                map.put("vin", null);
            }
            if (jsonObject.getJSONObject("发动机号码") != null) {
                map.put("engineNo", jsonObject.getJSONObject("发动机号码").getString("words"));
            }else{
                map.put("engineNo", null);
            }
            if (jsonObject.getJSONObject("住址") != null) {
                map.put("ownerAddr", jsonObject.getJSONObject("住址").getString("words"));
            }else{
                map.put("ownerAddr", null);
            }
            if (jsonObject.getJSONObject("发证日期") != null) {
                String registerDate = jsonObject.getJSONObject("发证日期").getString("words");
                registerDate = registerDate.substring(0,4)+"-"+registerDate.substring(4,6)+"-"+registerDate.substring(6);
                map.put("certDate", registerDate);
            }else{
                map.put("certDate", null);
            }
            if (jsonObject.getJSONObject("号牌号码") != null) {
                map.put("plate", jsonObject.getJSONObject("号牌号码").getString("words"));
            }else{
                map.put("plate", null);
            }
            if (jsonObject.getJSONObject("品牌型号") != null) {
                map.put("modelType", jsonObject.getJSONObject("品牌型号").getString("words"));
            }else{
                map.put("modelType", null);
            }
            if (jsonObject.getJSONObject("使用性质") != null) {
                map.put("useType", jsonObject.getJSONObject("使用性质").getString("words"));
            }else{
                map.put("useType", null);
            }
            if (jsonObject.getJSONObject("车辆类型") != null) {
                map.put("vehicleType", jsonObject.getJSONObject("车辆类型").getString("words"));
            }else{
                map.put("vehicleType", null);
            }
            if (jsonObject.getJSONObject("所有人") != null) {
                map.put("ownerName", jsonObject.getJSONObject("所有人").getString("words"));
            }else{
                map.put("ownerName", null);
            }
            if (jsonObject.getJSONObject("注册日期") != null) {
//                map.put("registerDate", jsonObject.getJSONObject("注册日期").getString("words"));
                String registerDate = jsonObject.getJSONObject("注册日期").getString("words");
                registerDate = registerDate.substring(0,4)+"-"+registerDate.substring(4,6)+"-"+registerDate.substring(6);
                map.put("registerDate", registerDate);
            }else{
                map.put("registerDate", null);
            }
            if (map.size() == 0) {
                throw new RuntimeException();
            }
            map.put("code", 200);
            return map;
        } catch (Exception e) {
            e.printStackTrace();
            log.info(e.toString());
            map.put("msg", "识别失败");
            map.put("code", 500);
            return map;
        }
    }
}
